/**
 * PanelUsuariosPerfiles.java
 */

 /**
 *  AdSec: Administrador de Secundarias
 *  Copyright (C) 2009 Daniela Ramírez Chaves (dannyrch@gmail.com)
 *  Copyright (C) 2009 Leonel Salazar Valverde (leo87sv@gmail.com)
 *
 *  This file is part of AdSec.
 *  AdSec is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 *
 *  AdSec is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 *
 *  You should have received a copy of the GNU General Public License
 *  along with AdSec.  If not, see <http://www.gnu.org/licenses/>.
 */

package adsec.presentacion;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
import java.util.Iterator;
import java.util.LinkedList;
import javax.swing.DefaultComboBoxModel;
import javax.swing.JComboBox;
import javax.swing.JOptionPane;
import javax.swing.JRadioButton;
import javax.swing.ListSelectionModel;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.event.ListSelectionEvent;
import javax.swing.event.ListSelectionListener;
import javax.swing.table.DefaultTableModel;
import adsec.entidades.Docente;
import org.jdesktop.application.Action;
import adsec.entidades.Usuario;
import adsec.entidades.UsuarioGrid;
import adsec.entidades.Estado;
import adsec.entidades.Permiso;
import adsec.entidades.Perfil;
import adsec.entidades.PersonalAdm;
import adsec.negocios.AdministradorSeguridad;
import adsec.negocios.ControladoraDocente;
import adsec.negocios.ControladoraUsuario;
import adsec.negocios.ControladoraPerfiles;
import adsec.negocios.ControladoraPersonalAdm;
import adsec.negocios.UtilidadesCapaNegocios;


public class PanelUsuariosPerfiles extends javax.swing.JPanel implements ListSelectionListener, ItemListener, ActionListener, ChangeListener{

    private AdministradorSeguridad adminSeguridad;
    private ControladoraUsuario controladoraUsuario;
    private ControladoraPerfiles controladoraPerfil;
    private Permiso permisoUsuario;
    private Estado estado;
    private int idUsuario;
    private static final int PANEL_USUARIOS = 0;
    private static final int PANEL_PERFILES = 1;

    /** Creates new form PanelNivelSeccion */
    public PanelUsuariosPerfiles() {
        initComponents();
        this.iniciarPanelUsuarios();
    }

    public void stateChanged(ChangeEvent e) {
        int i = this.tabModuloSeguridad.getSelectedIndex();
        if (i != -1) {
            switch(i){
                case PANEL_USUARIOS:
                    this.iniciarPanelUsuarios();
                break;
                case PANEL_PERFILES:
                    this.panelPerfiles.iniciarPanelPerfiles();
                break;
            }
        }
    }

    private void iniciarPanelUsuarios(){
        this.adminSeguridad = AdministradorSeguridad.getInstancia();
        this.controladoraUsuario = new ControladoraUsuario();
        this.controladoraPerfil = new ControladoraPerfiles();
        this.permisoUsuario = this.adminSeguridad.getPermiso(UtilidadesCapaNegocios.moduloUsuarios);
        this.estado = new Estado();
        this.idUsuario = -1;
        this.setHabilitarCampos(false);
        this.habilitarBotonesIME(this.permisoUsuario.isInsertar(), false, false);
        //this.habilitarBotonesIME(true, false, false);
        this.cargarGridUsuarios();
        this.habilitarAceptarCancelar(false);
    }//fin de iniciarPanelUsuarios
    /**
     ** Recibe un boolean para habilitar todos los campos de la pantalla
     ** o ya sea deshabilitarlos
     **/
    private void setHabilitarCampos(boolean habilitar){
        this.txtNombre.setEnabled(habilitar);
        this.txtPassword.setEnabled(habilitar);
        this.txtConfirmar.setEnabled(habilitar);
        this.rbtnAdministrativo.setEnabled(habilitar);
        this.rbtnDocente.setEnabled(habilitar);
        this.cbCedula.setEnabled(habilitar);
        this.cbNombreApellidos.setEnabled(habilitar);
        this.cbPerfil.setEnabled(habilitar);
    }//fin de setHabilitarCampos

    /**
     ** Habilita o deshabilita los botones insertar, modificar y eliminar
     **/
    private void habilitarBotonesIME(boolean insertar, boolean modificar, boolean eliminar){
        this.btnInsertar.setEnabled(insertar);
        this.btnModificar.setEnabled(modificar);
        this.btnEliminar.setEnabled(eliminar);
    }

    /**
     ** Habilita o deshabilita los botones aceptar y cancelar
     **/
    private void habilitarAceptarCancelar(boolean habilitar){
        this.btnAceptar.setEnabled(habilitar);
        this.btnCancelar.setEnabled(habilitar);
    }

    /**
     ** Limpia todos los campos de la pantalla
     **/
    private void limpiarCampos(){
        this.idUsuario = -1;
        this.txtNombre.setText("");
        this.txtPassword.setText("");
        this.txtConfirmar.setText("");
        this.btngroupTipoPersona.clearSelection();
        this.limpiarComboBoxes();
        this.cbCedula.setSelectedIndex(-1);
        this.cbNombreApellidos.setSelectedIndex(-1);
        this.cbPerfil.setSelectedIndex(-1);
    }//fin de limpiarCampos

    private void limpiarComboBoxes(){
        ((DefaultComboBoxModel) this.cbCedula.getModel()).removeAllElements();
        ((DefaultComboBoxModel) this.cbNombreApellidos.getModel()).removeAllElements();
        ((DefaultComboBoxModel) this.cbPerfil.getModel()).removeAllElements();
    }//fin de limpiarComboBoxes

    /**
     ** Obtiene todos los datos del usuario y crea un objeto de tipo Usuario
     ** el cual es retornado
     ** @return Un Usuario
     */
    public Usuario obtenerDatosUsuario(){
        Usuario usuario = new Usuario();
        usuario.setIdUsuario(this.idUsuario);
        usuario.setNombre(this.txtNombre.getText());
        usuario.setPassword(new String(this.txtPassword.getPassword()));
        if(rbtnDocente.isSelected()){
            usuario.setTipo(Usuario.CEDULA_DOCENTE);
            usuario.setCedulaDocente((String)this.cbCedula.getSelectedItem());
        }else{
            if(rbtnAdministrativo.isSelected()){
                usuario.setTipo(Usuario.CEDULA_PERSONAL_ADM);
                usuario.setCedulaPersonalAdm((String)this.cbCedula.getSelectedItem());
            }//fin de if
        }//fin de else
        if(cbPerfil.getSelectedIndex() >= 0){
            usuario.setIdPerfil(this.controladoraPerfil.getIdPerfil(this.cbPerfil.getSelectedIndex()));
        }//fin de if
        
        return usuario;
    }//fin de obtenerDatosUsuario
    
    private void insertarUsuario(){
        Usuario usuario = this.obtenerDatosUsuario();
        if(!UtilidadesCapaNegocios.existeLlave(Usuario.nombreTabla, Usuario.nombreNC, usuario.getNombre())){
            int resultado = this.controladoraUsuario.insertarUsuario(usuario);
            if(resultado == UtilidadesCapaNegocios.QUERY_OK){
                this.gridUsuarios.getSelectionModel().clearSelection();
                JOptionPane.showMessageDialog(null, "El usuario fue insertado con éxito");
                this.volverConsultar();
            }//fin de if
            else{
                JOptionPane.showMessageDialog(null, UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloUsuarios, UtilidadesCapaNegocios.opInsertar), "ERROR", JOptionPane.ERROR_MESSAGE);
            }//fin de else
        }else{
            JOptionPane.showMessageDialog(null, "El usuario con el nombre " + usuario.getNombre() + " ya existe", "ERROR", JOptionPane.ERROR_MESSAGE);
        }
    }//fin de insertarUsuario

    private void modificarUsuario(){
        Usuario usuario = this.obtenerDatosUsuario();
        int resultado = this.controladoraUsuario.modificarUsuario(usuario);
        if(resultado == UtilidadesCapaNegocios.QUERY_OK){
            this.gridUsuarios.getSelectionModel().clearSelection();
            JOptionPane.showMessageDialog(null, "El usuario fue modificado con éxito");
            this.volverConsultar();
        }//fin de if
        else{
            JOptionPane.showMessageDialog(null, UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloUsuarios, UtilidadesCapaNegocios.opModificar), "ERROR", JOptionPane.ERROR_MESSAGE);
        }//fin de else

    }//fin de modificarUsuario

    private void eliminarUsuario(){
        int resultado = this.controladoraUsuario.eliminarUsuario(this.idUsuario);
        if(resultado == UtilidadesCapaNegocios.QUERY_OK){
            this.gridUsuarios.getSelectionModel().clearSelection();
            JOptionPane.showMessageDialog(null, "El usuario fue eliminado con éxito");
            this.volverConsultar();
        }//fin de if
        else{
            JOptionPane.showMessageDialog(null, UtilidadesCapaNegocios.getErrorOperacion(UtilidadesCapaNegocios.moduloUsuarios, UtilidadesCapaNegocios.opEliminar), "ERROR", JOptionPane.ERROR_MESSAGE);
        }//fin de else
    }//fin de eliminarUsuario

    private void consultarUsuario(int idUsuario){
        Usuario usuario = controladoraUsuario.consultarUsuarioGrid(idUsuario);
        if(usuario != null){
            this.idUsuario = usuario.getIdUsuario();
            this.txtNombre.setText(usuario.getNombre());
            this.txtPassword.setText("");
            this.txtConfirmar.setText("");
            this.limpiarComboBoxes();
            this.cbCedula.setSelectedIndex(-1);

            switch(usuario.getTipo()){
                case Usuario.CEDULA_DOCENTE:
                    this.rbtnDocente.setSelected(true);
                    this.cargarComboBoxDatosDocente();
                    if(!usuario.getCedulaDocente().equals(UtilidadesCapaNegocios.CEDULA_INVALIDA)){
                       this.cbCedula.setSelectedItem(usuario.getCedulaDocente());
                    }
                break;
                case Usuario.CEDULA_PERSONAL_ADM:
                    this.rbtnAdministrativo.setSelected(true);
                    this.cargarComboBoxDatosPersonalAdm();
                    if(!usuario.getCedulaPersonalAdm().equals(UtilidadesCapaNegocios.CEDULA_INVALIDA)){
                        this.cbCedula.setSelectedItem(usuario.getCedulaPersonalAdm());
                    }
                break;
                case Usuario.SIN_TIPO:
                break;
                default:
                break;
            }//fin de switch

            this.cbNombreApellidos.setSelectedIndex(this.cbCedula.getSelectedIndex());

            LinkedList<Perfil> listaPerfiles = this.controladoraPerfil.consultarPerfiles();
            Iterator<Perfil> iterador = listaPerfiles.iterator();
            int indice = 0;
            while(iterador.hasNext()){
                Perfil perfilTmp = iterador.next();
                ((DefaultComboBoxModel) this.cbPerfil.getModel()).addElement(perfilTmp.getNombre());
                if(perfilTmp.getIdPerfil() == usuario.getIdPerfil()){
                    this.cbPerfil.setSelectedIndex(indice);
                }//fin de if
                indice++;
            }//fin de while
            this.habilitarBotonesIME(this.permisoUsuario.isInsertar(), this.permisoUsuario.isModificar(), this.permisoUsuario.isEliminar());
        }//fin de if
    }//fin de consultarUsuarioGrid

    private void cargarPerfiles(){
        ((DefaultComboBoxModel) this.cbPerfil.getModel()).removeAllElements();
        LinkedList<Perfil> listaPerfiles = this.controladoraPerfil.consultarPerfiles();
        Iterator<Perfil> iterador = listaPerfiles.iterator();
        while(iterador.hasNext()){
            Perfil perfilTmp = iterador.next();
            ((DefaultComboBoxModel) this.cbPerfil.getModel()).addElement(perfilTmp.getNombre());
        }//fin de while
    }//fin de cargarPerfiles

    private void volverConsultar(){
        this.estado.setEstadoActual(Estado.CONSULTAR);
        //this.habilitarBotonesIME(true, true, true);
        this.habilitarBotonesIME(this.permisoUsuario.isInsertar(), this.permisoUsuario.isModificar(), this.permisoUsuario.isEliminar());
        this.setHabilitarCampos(false);
        this.habilitarAceptarCancelar(false);
        this.cargarPerfiles();
        this.cargarGridUsuarios();
    }//fin de volverConsultar

    private void cargarGridUsuarios(){
        this.limpiarGridUsuarios();
        if(this.permisoUsuario.isConsultar()){
            LinkedList<UsuarioGrid> usuarios = controladoraUsuario.consultarUsuarios();
            Iterator<UsuarioGrid> iterador = usuarios.iterator();
            while(iterador.hasNext()){
                UsuarioGrid usuarioGrid = iterador.next();
                Object arregloDatos[] = new Object[5];
                arregloDatos[0] = usuarioGrid.getNombreUsuario();
                arregloDatos[1] = usuarioGrid.getNombrePerfil();
                arregloDatos[2] = usuarioGrid.getNombrePersona();
                arregloDatos[3] = usuarioGrid.getApellidosPersona();
                ((DefaultTableModel)this.gridUsuarios.getModel()).addRow(arregloDatos);
            }//fin de while
        }
    }//fin de cargarGridUsuarios

    private void limpiarGridUsuarios(){
        ((DefaultTableModel)this.gridUsuarios.getModel()).setRowCount(0);
    }//fin de limpiarGridUsuarios

    public void valueChanged(ListSelectionEvent evento){
        int filas = ((DefaultTableModel)this.gridUsuarios.getModel()).getRowCount();
        if(filas > 0 && estado.getEstadoActual() == Estado.CONSULTAR && evento.getValueIsAdjusting()){
            int fila = this.gridUsuarios.getSelectedRow();
            if(fila >= 0){
                this.consultarUsuario(fila);
            }//fin de if
        }//fin de if
    }//fin de método valueChanged

    public void itemStateChanged(ItemEvent evento){
        JComboBox fuente = (JComboBox) evento.getSource();
        if(fuente == this.cbCedula){
            this.cbNombreApellidos.removeItemListener(this);
            this.cbNombreApellidos.setSelectedIndex(this.cbCedula.getSelectedIndex());
            this.cbNombreApellidos.addItemListener(this);
        }else{
            if(fuente == this.cbNombreApellidos){
                this.cbCedula.removeItemListener(this);
                this.cbCedula.setSelectedIndex(this.cbNombreApellidos.getSelectedIndex());
                this.cbCedula.addItemListener(this);
            }
        }
    }//fin de itemStateChanged

    public void actionPerformed(ActionEvent evento){
        JRadioButton fuente = (JRadioButton) evento.getSource();
        if(fuente == this.rbtnAdministrativo){
            this.cargarComboBoxDatosPersonalAdm();
        }else{
            if(fuente == this.rbtnDocente){
                this.cargarComboBoxDatosDocente();
            }
        }
    }//fin de actionPerformed

    private boolean validarDatos(){
        boolean resultado = true;
        String password = new String(txtPassword.getPassword());
        String confirmacion = new String(txtConfirmar.getPassword());
        resultado &= (password.equals(confirmacion));
        if(!resultado){
            JOptionPane.showMessageDialog(null, "La contraseña que escribió no es igual a la que confirmó. Intente de nuevo por favor", "ERROR",JOptionPane.WARNING_MESSAGE);
        }
        return resultado;
    }//fin de validarDatos

    private boolean verificarDatosObligatorios(){
        boolean resultado = true;
        resultado &= !(txtNombre.getText().trim().isEmpty());
        String password = new String(txtPassword.getPassword());
        String confirmacion = new String(txtConfirmar.getPassword());
        resultado &= (password.equals(confirmacion));
        resultado &= this.cbPerfil.getSelectedIndex() >= 0;
        if(!resultado){
            JOptionPane.showMessageDialog(null, "El nombre de usuario, su contraseña, la confirmación de la misma\ny el perfil son obligatorios", "ERROR",JOptionPane.WARNING_MESSAGE);
        }
        return resultado;
    }//fin de verificarDatosObligatorios

    @Action
    public void insertandoUsuario() {
        this.estado.setEstadoActual(Estado.INSERTAR);
        this.limpiarCampos();
        this.setHabilitarCampos(true);
        this.habilitarBotonesIME(false, false, false);
        this.habilitarAceptarCancelar(true);
        this.cargarPerfiles();
    }//fin de insertandoUsuario

    @Action
    public void modificandoUsuario() {
        this.estado.setEstadoActual(Estado.MODIFICAR);
        this.setHabilitarCampos(true);
        this.habilitarBotonesIME(false, false, false);
        this.habilitarAceptarCancelar(true);
    }//fin de modificandoUsuario

    @Action
    public void eliminandoUsuario() {
        Animador.animar();
        if(this.mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opEliminar, "ELIMINAR")){
            this.eliminarUsuario();
            this.limpiarCampos();
        }
        Animador.detenerAnimacion();
    }//fin de eliminandoUsuario

    /**
     ** Muestra un mensaje de confirmación para que el usuario decida si realmente
     ** quiere llevar a cabo una operación
     ** @param operacion Código de operación realizada, tomada de UtilidadesCapaNegocios
     ** @param titulo Título a mostrar en el cuadro de confirmación
     ** @return Confirmación: true si el usuario acepta, false en otro caso.
     **/
    private boolean mostrarMensajeConfirmacion(int operacion,String titulo){
        boolean resultado = true;
        String mensaje = UtilidadesCapaNegocios.getMensajeConfirmacion(UtilidadesCapaNegocios.moduloUsuarios, operacion);
        int respuesta = JOptionPane.showConfirmDialog(null, mensaje,titulo ,JOptionPane.YES_NO_OPTION,JOptionPane.WARNING_MESSAGE);
        resultado = respuesta == JOptionPane.OK_OPTION;
        return resultado;
    }//fin de mostrarMensajeConfirmacion

    @Action
    public void accionAceptar() {
        Animador.animar();
        switch(estado.getEstadoActual()){
            case Estado.INSERTAR:
                if(mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opInsertar, "INSERTAR")){
                    if(verificarDatosObligatorios() && validarDatos()){
                        this.insertarUsuario();
                    }
                }
            break;
            case Estado.MODIFICAR:
                if(mostrarMensajeConfirmacion(UtilidadesCapaNegocios.opModificar, "MODIFICAR")){
                    if(verificarDatosObligatorios() && validarDatos()){
                        this.modificarUsuario();
                    }
                }
            break;
        }//fin de switch
        Animador.detenerAnimacion();
    }//fin de accionAceptar

    @Action
    public void accionCancelar() {
        this.limpiarCampos();
        this.volverConsultar();
    }//fin de accionCancelar

    private void cargarComboBoxDatosDocente(){
        ControladoraDocente contDocente = new ControladoraDocente();
        LinkedList<Docente> listaDocentes = contDocente.consultarDocentes();
        DefaultComboBoxModel modeloCedula = new DefaultComboBoxModel();
        DefaultComboBoxModel modeloNombreApellidos = new DefaultComboBoxModel();
        Iterator<Docente> iterador = listaDocentes.iterator();
        while(iterador.hasNext()){
            Docente docente = iterador.next();
            modeloCedula.addElement(docente.getCedula());
            modeloNombreApellidos.addElement(docente.getNombre() + " " + docente.getApellidos());
        }//fin de while
        this.cbCedula.setModel(modeloCedula);
        this.cbNombreApellidos.setModel(modeloNombreApellidos);
    }//fin de cargarComboBoxDatosDocente

    private void cargarComboBoxDatosPersonalAdm(){
        ControladoraPersonalAdm contPersonal = new ControladoraPersonalAdm();
        LinkedList<PersonalAdm> listaPersonal = contPersonal.consultarPersonalAdms();
        DefaultComboBoxModel modeloCedula = new DefaultComboBoxModel();
        DefaultComboBoxModel modeloNombreApellidos = new DefaultComboBoxModel();
        Iterator<PersonalAdm> iterador = listaPersonal.iterator();
        while(iterador.hasNext()){
            PersonalAdm personalAdm = iterador.next();
            modeloCedula.addElement(personalAdm.getCedula());
            modeloNombreApellidos.addElement(personalAdm.getNombre() + " " + personalAdm.getApellidos());
        }//fin de while
        this.cbCedula.setModel(modeloCedula);
        this.cbNombreApellidos.setModel(modeloNombreApellidos);
    }//fin de cargarComboBoxDatosPersonalAdm

    /** This method is called from within the constructor to
     * initialize the form.
     * WARNING: Do NOT modify this code. The content of this method is
     * always regenerated by the Form Editor.
     */
    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">//GEN-BEGIN:initComponents
    private void initComponents() {

        btngroupTipoPersona = new javax.swing.ButtonGroup();
        tabModuloSeguridad = new javax.swing.JTabbedPane();
        panelUsuario = new javax.swing.JPanel();
        lbNombre = new javax.swing.JLabel();
        txtNombre = new javax.swing.JTextField();
        lbPersona = new javax.swing.JLabel();
        cbCedula = new javax.swing.JComboBox();
        cbNombreApellidos = new javax.swing.JComboBox();
        btnInsertar = new javax.swing.JButton();
        btnModificar = new javax.swing.JButton();
        btnEliminar = new javax.swing.JButton();
        lbContraseña = new javax.swing.JLabel();
        txtPassword = new javax.swing.JPasswordField();
        lbTipo = new javax.swing.JLabel();
        rbtnAdministrativo = new javax.swing.JRadioButton();
        rbtnDocente = new javax.swing.JRadioButton();
        jScrollPane1 = new javax.swing.JScrollPane();
        gridUsuarios = new javax.swing.JTable();
        btnAceptar = new javax.swing.JButton();
        btnCancelar = new javax.swing.JButton();
        lbConfirmar = new javax.swing.JLabel();
        txtConfirmar = new javax.swing.JPasswordField();
        lbPerfil = new javax.swing.JLabel();
        cbPerfil = new javax.swing.JComboBox();
        panelPerfiles = new adsec.presentacion.PanelPerfiles();

        this.btngroupTipoPersona.add(this.rbtnAdministrativo);
        this.btngroupTipoPersona.add(this.rbtnDocente);

        setMinimumSize(new java.awt.Dimension(660, 920));
        setName("Form"); // NOI18N

        tabModuloSeguridad.setMinimumSize(new java.awt.Dimension(660, 920));
        tabModuloSeguridad.setName("tabModuloSeguridad"); // NOI18N

        panelUsuario.setMinimumSize(new java.awt.Dimension(660, 580));
        panelUsuario.setName("panelUsuario"); // NOI18N
        panelUsuario.setPreferredSize(new java.awt.Dimension(660, 580));

        org.jdesktop.application.ResourceMap resourceMap = org.jdesktop.application.Application.getInstance(adsec.presentacion.LiceoEscazuApp.class).getContext().getResourceMap(PanelUsuariosPerfiles.class);
        lbNombre.setText(resourceMap.getString("lbNombre.text")); // NOI18N
        lbNombre.setName("lbNombre"); // NOI18N

        txtNombre.setHorizontalAlignment(javax.swing.JTextField.LEFT);
        txtNombre.setText(resourceMap.getString("txtNombre.text")); // NOI18N
        txtNombre.setName("txtNombre"); // NOI18N

        lbPersona.setText(resourceMap.getString("lbPersona.text")); // NOI18N
        lbPersona.setName("lbPersona"); // NOI18N

        cbCedula.setName("cbCedula"); // NOI18N

        cbNombreApellidos.setName("cbNombreApellidos"); // NOI18N

        javax.swing.ActionMap actionMap = org.jdesktop.application.Application.getInstance(adsec.presentacion.LiceoEscazuApp.class).getContext().getActionMap(PanelUsuariosPerfiles.class, this);
        btnInsertar.setAction(actionMap.get("insertandoUsuario")); // NOI18N
        btnInsertar.setText(resourceMap.getString("btnInsertar.text")); // NOI18N
        btnInsertar.setName("btnInsertar"); // NOI18N

        btnModificar.setAction(actionMap.get("modificandoUsuario")); // NOI18N
        btnModificar.setText(resourceMap.getString("btnModificar.text")); // NOI18N
        btnModificar.setName("btnModificar"); // NOI18N

        btnEliminar.setAction(actionMap.get("eliminandoUsuario")); // NOI18N
        btnEliminar.setText(resourceMap.getString("btnEliminar.text")); // NOI18N
        btnEliminar.setName("btnEliminar"); // NOI18N

        lbContraseña.setText(resourceMap.getString("lbContraseña.text")); // NOI18N
        lbContraseña.setName("lbContraseña"); // NOI18N

        txtPassword.setText(resourceMap.getString("txtPassword.text")); // NOI18N
        txtPassword.setName("txtPassword"); // NOI18N

        lbTipo.setText(resourceMap.getString("lbTipo.text")); // NOI18N
        lbTipo.setName("lbTipo"); // NOI18N

        rbtnAdministrativo.setText(resourceMap.getString("rbtnAdministrativo.text")); // NOI18N
        rbtnAdministrativo.setName("rbtnAdministrativo"); // NOI18N

        rbtnDocente.setText(resourceMap.getString("rbtnDocente.text")); // NOI18N
        rbtnDocente.setName("rbtnDocente"); // NOI18N

        jScrollPane1.setName("jScrollPane1"); // NOI18N

        gridUsuarios.setModel(new javax.swing.table.DefaultTableModel(
            new Object [][] {

            },
            new String [] {
                "Usuario", "Perfil", "Nombre", "Apellidos"
            }
        ) {
            boolean[] canEdit = new boolean [] {
                false, false, false, false
            };

            public boolean isCellEditable(int rowIndex, int columnIndex) {
                return canEdit [columnIndex];
            }
        });
        gridUsuarios.setName("gridUsuarios"); // NOI18N
        jScrollPane1.setViewportView(gridUsuarios);
        gridUsuarios.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
        gridUsuarios.getSelectionModel().addListSelectionListener(this);

        btnAceptar.setAction(actionMap.get("accionAceptar")); // NOI18N
        btnAceptar.setText(resourceMap.getString("btnAceptar.text")); // NOI18N
        btnAceptar.setName("btnAceptar"); // NOI18N

        btnCancelar.setAction(actionMap.get("accionCancelar")); // NOI18N
        btnCancelar.setText(resourceMap.getString("btnCancelar.text")); // NOI18N
        btnCancelar.setName("btnCancelar"); // NOI18N

        lbConfirmar.setText(resourceMap.getString("lbConfirmar.text")); // NOI18N
        lbConfirmar.setName("lbConfirmar"); // NOI18N

        txtConfirmar.setText(resourceMap.getString("txtConfirmar.text")); // NOI18N
        txtConfirmar.setName("txtConfirmar"); // NOI18N

        lbPerfil.setText(resourceMap.getString("lbPerfil.text")); // NOI18N
        lbPerfil.setName("lbPerfil"); // NOI18N

        cbPerfil.setName("cbPerfil"); // NOI18N

        javax.swing.GroupLayout panelUsuarioLayout = new javax.swing.GroupLayout(panelUsuario);
        panelUsuario.setLayout(panelUsuarioLayout);
        panelUsuarioLayout.setHorizontalGroup(
            panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelUsuarioLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addComponent(jScrollPane1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 635, Short.MAX_VALUE)
                    .addGroup(panelUsuarioLayout.createSequentialGroup()
                        .addGroup(panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                            .addGroup(panelUsuarioLayout.createSequentialGroup()
                                .addGroup(panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                    .addComponent(lbPerfil)
                                    .addComponent(lbPersona)
                                    .addComponent(lbTipo)
                                    .addComponent(lbContraseña)
                                    .addComponent(lbNombre)
                                    .addComponent(lbConfirmar))
                                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                .addGroup(panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                    .addGroup(panelUsuarioLayout.createSequentialGroup()
                                        .addComponent(rbtnAdministrativo)
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                                        .addComponent(rbtnDocente))
                                    .addGroup(panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                        .addComponent(txtNombre, javax.swing.GroupLayout.Alignment.LEADING, javax.swing.GroupLayout.PREFERRED_SIZE, 182, javax.swing.GroupLayout.PREFERRED_SIZE)
                                        .addComponent(txtPassword, javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(txtConfirmar, javax.swing.GroupLayout.Alignment.LEADING))
                                    .addGroup(panelUsuarioLayout.createSequentialGroup()
                                        .addGroup(panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING, false)
                                            .addComponent(cbCedula, javax.swing.GroupLayout.Alignment.LEADING, 0, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
                                            .addComponent(cbPerfil, javax.swing.GroupLayout.Alignment.LEADING, 0, 156, Short.MAX_VALUE))
                                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                                        .addComponent(cbNombreApellidos, 0, 249, Short.MAX_VALUE))))
                            .addComponent(btnInsertar))
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btnModificar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btnEliminar))
                    .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, panelUsuarioLayout.createSequentialGroup()
                        .addComponent(btnAceptar)
                        .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                        .addComponent(btnCancelar)))
                .addContainerGap())
        );
        panelUsuarioLayout.setVerticalGroup(
            panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(panelUsuarioLayout.createSequentialGroup()
                .addContainerGap()
                .addGroup(panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnEliminar)
                    .addComponent(btnModificar)
                    .addComponent(btnInsertar))
                .addGap(12, 12, 12)
                .addGroup(panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtNombre, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbNombre))
                .addGap(18, 18, 18)
                .addGroup(panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtPassword, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbContraseña))
                .addGap(18, 18, 18)
                .addGroup(panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(txtConfirmar, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbConfirmar))
                .addGap(18, 18, 18)
                .addGroup(panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(rbtnAdministrativo)
                    .addComponent(rbtnDocente)
                    .addComponent(lbTipo))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cbCedula, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(cbNombreApellidos, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbPersona))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
                .addGroup(panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(cbPerfil, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(lbPerfil))
                .addGap(24, 24, 24)
                .addComponent(jScrollPane1, javax.swing.GroupLayout.PREFERRED_SIZE, 225, javax.swing.GroupLayout.PREFERRED_SIZE)
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.UNRELATED)
                .addGroup(panelUsuarioLayout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(btnAceptar)
                    .addComponent(btnCancelar))
                .addContainerGap(378, Short.MAX_VALUE))
        );

        this.cbCedula.addItemListener(this);
        this.cbNombreApellidos.addItemListener(this);
        this.rbtnAdministrativo.addActionListener(this);
        this.rbtnDocente.addActionListener(this);

        tabModuloSeguridad.addTab(resourceMap.getString("panelUsuario.TabConstraints.tabTitle"), panelUsuario); // NOI18N

        panelPerfiles.setName("panelPerfiles"); // NOI18N
        tabModuloSeguridad.addTab(resourceMap.getString("panelPerfiles.TabConstraints.tabTitle"), panelPerfiles); // NOI18N

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(this);
        this.setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(tabModuloSeguridad, javax.swing.GroupLayout.DEFAULT_SIZE, 660, Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(javax.swing.GroupLayout.Alignment.TRAILING, layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(tabModuloSeguridad, javax.swing.GroupLayout.DEFAULT_SIZE, 920, Short.MAX_VALUE)
                .addContainerGap())
        );

        tabModuloSeguridad.getAccessibleContext().setAccessibleName(resourceMap.getString("jTabbedPane1.AccessibleContext.accessibleName")); // NOI18N
        this.tabModuloSeguridad.addChangeListener(this);
    }// </editor-fold>//GEN-END:initComponents


    // Variables declaration - do not modify//GEN-BEGIN:variables
    private javax.swing.JButton btnAceptar;
    private javax.swing.JButton btnCancelar;
    private javax.swing.JButton btnEliminar;
    private javax.swing.JButton btnInsertar;
    private javax.swing.JButton btnModificar;
    private javax.swing.ButtonGroup btngroupTipoPersona;
    private javax.swing.JComboBox cbCedula;
    private javax.swing.JComboBox cbNombreApellidos;
    private javax.swing.JComboBox cbPerfil;
    private javax.swing.JTable gridUsuarios;
    private javax.swing.JScrollPane jScrollPane1;
    private javax.swing.JLabel lbConfirmar;
    private javax.swing.JLabel lbContraseña;
    private javax.swing.JLabel lbNombre;
    private javax.swing.JLabel lbPerfil;
    private javax.swing.JLabel lbPersona;
    private javax.swing.JLabel lbTipo;
    private adsec.presentacion.PanelPerfiles panelPerfiles;
    private javax.swing.JPanel panelUsuario;
    private javax.swing.JRadioButton rbtnAdministrativo;
    private javax.swing.JRadioButton rbtnDocente;
    private javax.swing.JTabbedPane tabModuloSeguridad;
    private javax.swing.JPasswordField txtConfirmar;
    private javax.swing.JTextField txtNombre;
    private javax.swing.JPasswordField txtPassword;
    // End of variables declaration//GEN-END:variables

}
